package com.abner.design.patterns.mediator;

/**
 * 中介者模式基本介绍
 * 	1) 中介者模式（Mediator Pattern），用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地
 * 	   相互引用，从而使其耦合松散，而且可以独立地改变它们之间的交互
 *  2) 中介者模式属于行为型模式，使代码易于维护
 *  3) 比如 MVC 模式，C（Controller 控制器）是 M（Model 模型）和 V（View 视图）的中介者，在前后端交互时起到了中间人的作用
 *
 * 注意事项和细节
 * 	1) 多个类相互耦合，会形成网状结构, 使用中介者模式将网状结构分离为星型结构，进行解耦
 * 	2) 减少类间依赖，降低了耦合，符合迪米特原则
 * 	3) 中介者承担了较多的责任，一旦中介者出现了问题，整个系统就会受到影响
 * 	4) 如果设计不当，中介者对象本身变得过于复杂，这点在实际使用时，要特别注意
 * @author abner
 */
public class Client {

	/**
	 * 智能家庭项目：
	 * 1) 智能家庭包括各种设备，闹钟、咖啡机、电视机、窗帘 等
	 * 2) 主人要看电视时，各个设备可以协同工作，自动完成看电视的准备工作，
	 * 		比如流程为：闹铃响起->咖啡机开始做咖啡->窗帘自动落下->电视机开始播放
	 * @param args
	 */
	public static void main(String[] args) {

		Mediator mediator = new ConcreteMediator();

		Alarm alarm = new Alarm(mediator, "alarm");
		CoffeeMachine coffeeMachine = new CoffeeMachine(mediator,"coffeeMachine");

		Curtains curtains = new Curtains(mediator, "curtains");
		TV tV = new TV(mediator, "TV");

		alarm.sendAlarm(0);
		coffeeMachine.FinishCoffee();
		alarm.sendAlarm(1);
	}

}
